perm filename DEBUG.SAI[ALF,DEK] blob
sn#462922 filedate 1979-08-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "debug"
C00007 ENDMK
C⊗;
BEGIN "debug"
REQUIRE "IOSAIL.HDR[SUB,SYS]" SOURCE!FILE;
STRING PROCEDURE SkipJunk( REFERENCE STRING line );
BEGIN "Skip the junk"
STRING dummy;
WHILE line and ( (line < "0") or ("9" < line < "A") or (line > "Z") ) DO
dummy ← LOP( line );
RETURN( line );
END "Skip the junk";
INTEGER PROCEDURE HexToDecimal( REFERENCE STRING bytes );
BEGIN "Hex to Decimal"
INTEGER byte;
byte ← LOP( bytes );
IF "A" ≤ byte ≤ "F" THEN
byte ← 10 + byte-"A"
ELSE
byte ← byte-"0";
RETURN( byte )
END "Hex to Decimal";
INTEGER PROCEDURE Decode( REFERENCE STRING bytes );
BEGIN "2 hex to 3 decimal"
SkipJunk( bytes );
RETURN( HexToDecimal( bytes ) * 16 + HexToDecimal( bytes ) );
END "2 hex to 3 decimal";
STRING PROCEDURE HexDigit( INTEGER halfbyte );
BEGIN "Hex digit"
IF halfbyte > 9 THEN
RETURN( ("A"+halfbyte) & null )
ELSE
RETURN( ("0"+halfbyte) & null );
END "Hex digit";
STRING PROCEDURE HexByte( INTEGER byte );
BEGIN "Hex byte"
RETURN( HexDigit( byte DIV 16 ) & HexDigit( byte MOD 16 ) );
END "Hex byte";
STRING PROCEDURE ReadyByte( REFERENCE STRING line );
BEGIN "Get the immediate hex byte"
SkipJunk( line );
RETURN( LOP( line ) & LOP( line ) );
END "Get the immediate hex byte";
STRING PROCEDURE ReadyWord( REFERENCE STRING line );
BEGIN "Get 2 bytes"
STRING temp;
temp ← ReadyByte( line );
RETURN( ReadyByte( line ) & temp );
END "Get 2 bytes";
external procedure BAIL;
STRING line, BC, DE, HL, A, mem;
INTEGER depth, flags;
SetReader( OpenRead("dump") );
SetPrint( "look", "F" );
WHILE not EOF DO
BEGIN "main loop"
do SkipJunk( line ← ReadLine ) until line or EOF;
if not line then continue;
depth ← 89 - Decode( line ) DIV 2;
mem ← ReadyByte( line );
BC ← ReadyWord( line );
DE ← ReadyWord( line );
HL ← ReadyWord( line );
flags ← Decode( line );
A ← ReadyByte( line );
PRINT( "loc=", ReadyWord( line ), ",mem=", mem, ",BC=", BC,
",DE=", DE, ",HL=", HL, ",",
IF flags LAND '200 THEN "S" ELSE " ",
IF flags LAND '100 THEN "Z" ELSE " ",
IF flags LAND '020 THEN "A" ELSE " ",
IF flags LAND '004 THEN "P" ELSE " ",
IF flags LAND '001 THEN "C" ELSE " ",
",A=", A, ",stack=", ReadyWord( line ), " ", ReadyWord( line ),
" [", depth, "]" & newline );
END "main loop";
CloseAll;
END "debug"